using System.Threading.Tasks;

namespace UnifiedTests;

[TestClass]
public class ScaleTests
{
    [DataDrivenTest]
    [TestData(0)]
    [TestData(1)]
    [TestData(2)]
    [TestData(3)]
    [TestData(4)]
    [TestData(5)]
    [TestData(6)]
    [TestData(7)]
    [TestData(8)]
    [TestData(9)]
    [TestData(10)]
    [TestData(11)]
    [TestData(12)]
    [TestData(13)]
    [TestData(14)]
    [TestData(15)]
    [TestData(16)]
    [TestData(17)]
    [TestData(18)]
    [TestData(19)]
    [TestData(20)]
    [TestData(21)]
    [TestData(22)]
    [TestData(23)]
    [TestData(24)]
    [TestData(25)]
    [TestData(26)]
    [TestData(27)]
    [TestData(28)]
    [TestData(29)]
    [TestData(30)]
    [TestData(31)]
    [TestData(32)]
    [TestData(33)]
    [TestData(34)]
    [TestData(35)]
    [TestData(36)]
    [TestData(37)]
    [TestData(38)]
    [TestData(39)]
    [TestData(40)]
    [TestData(41)]
    [TestData(42)]
    [TestData(43)]
    [TestData(44)]
    [TestData(45)]
    [TestData(46)]
    [TestData(47)]
    [TestData(48)]
    [TestData(49)]
    [TestData(50)]
    [TestData(51)]
    [TestData(52)]
    [TestData(53)]
    [TestData(54)]
    [TestData(55)]
    [TestData(56)]
    [TestData(57)]
    [TestData(58)]
    [TestData(59)]
    [TestData(60)]
    [TestData(61)]
    [TestData(62)]
    [TestData(63)]
    [TestData(64)]
    [TestData(65)]
    [TestData(66)]
    [TestData(67)]
    [TestData(68)]
    [TestData(69)]
    [TestData(70)]
    [TestData(71)]
    [TestData(72)]
    [TestData(73)]
    [TestData(74)]
    [TestData(75)]
    [TestData(76)]
    [TestData(77)]
    [TestData(78)]
    [TestData(79)]
    [TestData(80)]
    [TestData(81)]
    [TestData(82)]
    [TestData(83)]
    [TestData(84)]
    [TestData(85)]
    [TestData(86)]
    [TestData(87)]
    [TestData(88)]
    [TestData(89)]
    [TestData(90)]
    [TestData(91)]
    [TestData(92)]
    [TestData(93)]
    [TestData(94)]
    [TestData(95)]
    [TestData(96)]
    [TestData(97)]
    [TestData(98)]
    [TestData(99)]
    public void Scale100_ParameterizedTest(int value)
    {
        var result = PerformCalculation(value);
        var squared = result * result;
        var sum = Enumerable.Range(1, value + 1).Sum();
    }

    [DataDrivenTest]
    [TestData(0, "A")]
    [TestData(1, "B")]
    [TestData(2, "C")]
    [TestData(3, "D")]
    [TestData(4, "E")]
    [TestData(5, "F")]
    [TestData(6, "G")]
    [TestData(7, "H")]
    [TestData(8, "I")]
    [TestData(9, "J")]
    [TestData(10, "K")]
    [TestData(11, "L")]
    [TestData(12, "M")]
    [TestData(13, "N")]
    [TestData(14, "O")]
    [TestData(15, "P")]
    [TestData(16, "Q")]
    [TestData(17, "R")]
    [TestData(18, "S")]
    [TestData(19, "T")]
    [TestData(20, "U")]
    [TestData(21, "V")]
    [TestData(22, "W")]
    [TestData(23, "X")]
    [TestData(24, "Y")]
    [TestData(25, "Z")]
    [TestData(26, "AA")]
    [TestData(27, "AB")]
    [TestData(28, "AC")]
    [TestData(29, "AD")]
    [TestData(30, "AE")]
    [TestData(31, "AF")]
    [TestData(32, "AG")]
    [TestData(33, "AH")]
    [TestData(34, "AI")]
    [TestData(35, "AJ")]
    [TestData(36, "AK")]
    [TestData(37, "AL")]
    [TestData(38, "AM")]
    [TestData(39, "AN")]
    [TestData(40, "AO")]
    [TestData(41, "AP")]
    [TestData(42, "AQ")]
    [TestData(43, "AR")]
    [TestData(44, "AS")]
    [TestData(45, "AT")]
    [TestData(46, "AU")]
    [TestData(47, "AV")]
    [TestData(48, "AW")]
    [TestData(49, "AX")]
    public void Scale50_MultiParamTest(int id, string name)
    {
        var processed = ProcessData(id, name);
        var combined = $"{id}_{name}";
        var length = combined.Length;
    }

    private int PerformCalculation(int value)
    {
        var result = 0;
        for (var i = 0; i < 10; i++)
        {
            result += value;
        }
        return result;
    }

    private string ProcessData(int id, string name)
    {
        return $"Processed_{id}_{name}_{DateTime.UtcNow.Ticks % 1000}";
    }
}
